#include "UDP.h"

// 客户端
int main(int argc, char const *argv[])
{
    // 应答信息结构体
    file_data_str File_DATA;
    memset(&File_DATA, 0, sizeof(File_DATA));

    ARGV_IF(argc, 3);
    // 初始化 UDP 客户端 
    int sock = 0;
    struct sockaddr_in server_add = UDP_Init_Client(atoi(argv[2]), argv[1], &sock);

    // 发送连接请求
    File_DATA.SYN = 1;
    sendto(sock, &File_DATA, sizeof(file_data_str), 0, (struct sockaddr *)&server_add, sizeof(server_add));

    // 接受 文件名
    recvfrom(sock, &File_DATA, sizeof(File_DATA), 0, NULL, NULL);

    if (File_DATA.num > 2)
    {
        printf("%s\n", File_DATA.buff);
    }

    // 选择文件
    memset(&File_DATA, 0, sizeof(File_DATA));
    printf("请输入你要下载的文件名:");
    char file_name[128];
    scanf("%s", file_name);

    // 发送你选择的文件名
    if (NULL != strstr(file_name, File_DATA.buff))
    {
        sendto(sock, file_name, sizeof(file_name), 0, (struct sockaddr *)&server_add, sizeof(server_add));
    }

    // 接受文件信息 并回发文件长度
    int fd = open(file_name, O_RDWR | O_CREAT | O_TRUNC, 0666);

    while (1)
    {
        memset(&File_DATA, 0, sizeof(File_DATA));
        // 接受
        recvfrom(sock, &File_DATA, sizeof(File_DATA), 0, NULL, NULL);
        write(fd, File_DATA.buff, strlen(File_DATA.buff));

        // 给服务器发确认信号
        File_DATA.num = strlen(File_DATA.buff);
        printf("客户端 :%d = \n" , File_DATA.num);
        sendto(sock , &File_DATA , sizeof(file_data_str) , 0 ,(struct sockaddr * ) & server_add , sizeof(server_add));

        if (1024 > File_DATA.num)
        {
            printf("下载完成\n");
            break;
        }
    }

    // 释放 UDP
    UDP_close(sock);

    return 0;
}
